ColorLib ver 1.0 by Reverend//HTB

1. Co to jest?
Jest to mala biblioteka przeznaczona do tworzenia tzw. 'color buttonow'. Sa to plaskie, kolorowe przyciski z opcja 'hover' znana chociazby z html'a. Po najechaniu kursorem lub po kliknieciu zmienia sie kolor przycisku. Biblioteka zostala napisana w assemblerze, dlatego nie zajmuje duzo miejsca

2. Jak tego uzywac?
Biblioteka moze byz uzyta przez programistow FASM'a oraz kazdego innego kompilatora wspierajacego uzywanie plikow .obj lub .lib (MS COFF) - czyli w praktyce wiekszosc kompilatorow pod windows powinna sobie dac z nia rade :) Aby stworzyc 'color button' nalezy wywolac jedna z 2 funkcji udostepnianych przez biblioteke.

2a. FASM
Aby moc uzywac biblioteki ColorLib w FASMie nalezy dolaczyc plik 'source\colorlib.ash'

 I. CButton. W eax zwrocony jest uchwyt do przycisku

	push	id		;; unikalne id przycisku
	push	wysokosc	;; wysokosc przycisku
	push	szerokosc	;; szerokosc przycisku
	push	y		;; wspolrzedna y
	push	x		;; wspolrzedna x
	push	rgb_color	;; kolor rgb - text gdy przycisk wcisniety
	push	rgb_color	;; kolor rgb - text gdy przycisk niewcisniety
	push	rgb_color	;; kolor rgb - 'hover'
	push	rgb_color	;; kolor rgb - przycisk gdy wcisniety
	push	rgb_color	;; kolor rgb - przycisk gdy niewcisniety
	push	text		;; text na przycisku
	push	instance	;; uchwyt modulu (hInstance)
	push	hwnd		;; uchwyt okna rodzica
	call	CButton 	;; wywolanie procki
	mov	[hButton], eax	;; zapisanie uchwytu przycisku

    NP.

	push	1		;; id = 1
	push	30		;; wysokosc = 30
	push	120		;; szerokosc = 120
	push	5		;; x = 5
	push	5		;; y = 5
	push	00FF0000h	;; kolor niebieski
	push	0000FF00h	;; kolor zielony
	push	000000FFh	;; kolor czerwony
	push	00FFFFFFh	;; kolor bialy
	push	00000000h	;; kolor czarny
	push	szText		;; text pod offsetem 'szText'
	push	[hInstance]	;; w [hInstance] znajduje sie uchwyt modulu
	push	[hWnd]		;; uchwyt rodzica
	call	CButton 	;; wywolanie procki
	mov	[hButton], eax	;; zapisanie uchwytu przycisku

 II. CButtonIndirect. Mozna tez stworzyc przycisk niebezposrednio. Wystarczy wypelnic odpowiednia strukture i wywolac funkcje podajac adres struktury jako parametr

  IIa. Deklaracja struktury

	struct CBUTTON
	  hParent		dd ?	;; uchwyt okna rodzica
	  hInstance		dd ?	;; uchwyt modulu
	  szBtnText		dd ?	;; text na przycisku
	  dwBtnColor		dd ?	;; kolor rgb - przycisk gdy niewcisniety
	  dwBtnClickedColor	dd ?	;; kolor rgb - przycisk gdy wcisniety
	  dwBtnHoverColor	dd ?	;; kolor rgb - 'hover'
	  dwBtnTextColor	dd ?	;; kolor rgb - text gdy przycisk niewcisniety
	  dwBtnTextClickedColor dd ?	;; kolor rgb - text gdy przycisk wcisniety
	  nX			dd ?	;; wspolrzedna x
	  nY			dd ?	;; wspolrzedna y
	  nWidth		dd ?	;; szerokosc przycisku
	  nHeight		dd ?	;; wysokosc przycisku
	  nId			dd ?	;; unikalne id przycisku
	ends

  IIb. Uzycie funkcji

	push	cbutton_strucutre	;; wskaznik do struktury
	call	CButtonIndirect 	;; wywolanie funkcji

2b. MASM
W MASMie wszystko jest wlasciwie podobne do FASMa. Z tym wyjatkiem, ze program nalezy skompilowac z plikiem 'source\colorlib.lib' lub 'source\colorlib.obj'. Prototypy funkcji i zadeklarowana struktura znajduje sie w 'source\colorlib.inc'. Funkcje wywoluje sie analogicznie do przykladu z FASMa

2c. C
Nalezy skompilowac z 'source\colorlib.obj' lub 'source\colorlib.lib'. Plik naglowkowy znajduje sie w 'source\colorlib.h'

 I. CButton

	HANDLE hButton = CButton(hwnd, hInstance, "Example", 0x00FF0000, 0x0000FF00,\
			 0x000000FF, 0x00FFFFFF, 0x00000000, 5, 5, 120, 30, 1);
 II. CButtonIndirect

	CBUTTON cb;
	LPCBUTTON lpcb;

	cb.hParent = hwnd;
	cb.hInstance = hInstance;
	cb.szBtnText = "Example";
	cb.dwBtnColor = 0x00FF0000;
	cb.dwBtnClickedColor = 0x0000FF00;
	cb.dwBtnHoverColor = 0x000000FF;
	cb.dwBtnTextColor = 0x00FFFFFF;
	cb.dwBtnTextClickedColor = 0x00000000;
	cb.nX = 5;
	cb.nY = 5;
	cb.nWidth = 120;
	cb.nHeight = 30;
	cb.nId = 1;
	HANDLE hButton = CButtonIndirect(lpcb);

3. Przyklady
W Katalogu 'examples' znajduja sie przyklady wykorzystania biblioteki w FASMie, MASMie oraz Dev-Cpp.

4. Zakonczenie
Idee oraz pierwowzor tej biblioteki stworzyl payteR//ex.HTB
Wszelkie uwagi, pytania, propozycje, bledy zglaszac na rev15@wp.pl

Reverend